package com.itheima.d4_bigdecimal;

import java.math.BigDecimal;
import java.math.RoundingMode;

public class Test2 {
    public static void main(String[] args) {
        // 目标：掌握BigDecimal进行精确运算的方案。
        double a = 0.1;
        double b = 0.2;




        // 1、把浮点型数据封装成BigDecimal对象，再来参与运算。
        // a、public BigDecimal(double val) 得到的BigDecimal对象是无法精确计算浮点型数据的。 注意：不推荐使用这个，
        //不建议使用，数据已经失真了
        BigDecimal b1 = new BigDecimal(a);
        BigDecimal b2 = new BigDecimal(b);
        BigDecimal add = b1.add(b2);
        System.out.println("add = " + add);

        // b、public BigDecimal(String val)  得到的BigDecimal对象是可以精确计算浮点型数据的。 可以使用。
        // c、public static BigDecimal valueOf(double val): 通过这个静态方法得到的BigDecimal对象是可以精确运算的。是最好的方案。
        BigDecimal b3 = new BigDecimal(a + "");
        BigDecimal b4 = BigDecimal.valueOf(b);


        // 2、public BigDecimal add(BigDecimal augend): 加法
        BigDecimal addResult = b3.add(b4);
        System.out.println("addResult = " + addResult);//0.3

        // 3、public BigDecimal subtract(BigDecimal augend): 减法
        BigDecimal subtractResult = b3.subtract(b4);//-0.1
        System.out.println("subtractResult = " + subtractResult);

        // 4、public BigDecimal multiply(BigDecimal augend): 乘法
        BigDecimal multiplyResult = b3.multiply(b4);
        System.out.println("multiplyResult = " + multiplyResult);//0.02

        // 5、public BigDecimal divide(BigDecimal b): 除法
        BigDecimal divide1 = b3.divide(b4);
        System.out.println("divide1 = " + divide1);//0.5


        // 6、public BigDecimal divide(另一个BigDecimal对象，精确几位，舍入模式) : 除法，可以设置精确几位。
        BigDecimal b5 = BigDecimal.valueOf(1);
        BigDecimal b6 = BigDecimal.valueOf(3);

        //BigDecimal divide2 = b5.divide(b6);
        //System.out.println("divide2 = " + divide2);
        BigDecimal divide2 = b5.divide(b6, 3, RoundingMode.HALF_UP);//保留3位小数，四舍五入
        System.out.println("divide2 = " + divide2);


        // 7、public double doubleValue() : 把BigDecimal对象又转换成double类型的数据。
        double v = divide2.doubleValue();
        System.out.println("v = " + v);

    }

}
